                             - 71 -

    2.  .

         
,       
 .      -  -
,          8253.
  2           .
       3,    -
   . -    -
   ,     
  .   ,  8253   -
  ,       ,
 .
        ,      .   
. 2-2  [2.1.1] ,    , 
       8255  [1.1.1].
       , 
           
  .
    PCjr   ,   -
 .       , 
    .         
  .    
PCjr  ,        -
,    .

                             - 72 -

   2.2.1    76496 ( PCjr).

   PCjr    4-   ,     
  ,       
 .      ,
            ,  
        .  -
      TI SN76496N. 
  8  - 2    -     
     0C0H.      -
;    IN,     .
   PCjr          .   
        -
  8253.        -
          .
     5  6  B  -
   8255 (  61H - . [1.1.1]). 
 :

         6  5           

           00                 8253
           01                  
           10                 /
           11                 76496

       BIOS PCjr      80H
 1AH.   AL    0  3,  -
   ,   .  
 .      76496    
  ,       -
 PCjr.
     ,      ,
    4-6   ,      
   .   :

         6-4             

         000                  
         001                  
         010                  
         011                  
         100                  
         101                  
         110                  
         111                  

          . 
   :

    1:  0-3    4  
                4-6     
                  7     1
    2:  0-5    6  
                  6    
                  7     0

                             - 73 -

        10- -
,       111  843     
.  ,  ,   110  
(111 843/2^10).      ( -
    B  8255),   
      ,     -
.           
.       ( 6  ),
        ,  
     .      
  .
            .
    :

    0-1      
          2      
          3      
        4-6       
          7        1

       ( ),
   2  1     ( ),  
 2  0.      
0-1   00B  10B;     11B,   
      3.
            
 .       .
   :

    0-3      
        4-6       
          7        1

  4    0,    . 
     1,    .    
        -
 .   0    2  (),  1 -
 4 ,  2 -  8    3 -  16 .   -
  28 .

                             - 74 -

   2.2.2  .

        ,  
   ;  [2.2.3]     , 
   .  ,     
  .      -
      8253,      
.       
 ,     -
,     .    
  ,         
         
[2.2.8]   .

    .

     SOUND      -
    .     (
37   32767),        
BIOS ( 0  65535),      18.2 .
SOUND  440,91    A   5   (5*18.2).
  ,    C() :

                 C()              523.3
                 D()              587.3
                 E()              659.3
                 F()              698.5
                 G()            784.0
                 A()              880.0
                 B()              987.7

      ,   , 
   -     .   , 
        (-
         -
).
       [2.2.1] PCjr  -
    SOUND     ,  
      .    
:  SOUND , , , .  -
    0    15,     8.  
    0  2,   0.   PCjr  
       
  ,      .   
    SOUND  ON.  SOUND OFF  -
   .     D- (--
) (D-F-A)   , :

100 SOUND ON             '  
110 SOUND 587,50,3,0     ' 
120 SOUND 699,50,3,1     ' 
130 SOUND 880,50,3,1     ' 

                             - 75 -

    .

              
8255           
 B,      ( 1).   B  
61H ( AT       8255 
,             
).            
 ,    ,   -
.           
.  ,   0    B      2
  ,         .
        ,     
.  . 2-4      -
 .
        . , 
"FREQUENCY",            
    .     ,
        . -
   "NUMBER_CYCLES"    .
          
.    ,     .
   ,         
  .      ,      
        (18.2   -
),        .   ,
    ,        BIOS 
  .      ,   
       ,   , 
    .

NUMBER_CYCLES  EQU   1000
FREQUENCY      EQU   300
PORT_B         EQU   61H
               CLI                 ; 
               MOV   DX,NUMBER_CYCLES  ;   DX
               IN    AL,PORT_B     ;    B
               AND   AL,11111110B  ;   
NEXT_CYCLE:    OR    AL,00000010B  ; 
               OUT   PORT_B,AL     ;    B
               MOV   CX,FREQUENCY  ;  -  CX
FIRST_HALF:    LOOP  FIRST_HALF    ; 
               AND   AL,11111101B  ; 
               OUT   PORT_B,AL     ;    B
               MOV   CX,FREQUENCY  ;  -  CX
SECOND_HALF:   LOOP  SECOND_HALF   ; 
               DEC   DX            ;   
               JNZ   NEXT_CYCLE    ; 0,   
               STI                 ; 

                             - 76 -

   2.2.3      .

            
  .     
    .  
 8253      ,   
  ,       
 .       2 
     ,   -
    .

    .

    SOUND       -
    ,   PLAY -   
  .   PLAY   , -
      ,  , 
  .     PLAY -
  [2.2.5].     MB ( ),
          -
    .  , MF ( 
 )          
,       .     
 A ()   :

100 PLAY "MB A"    '  ...
110 ......         '   

   ,    ,  X = PLAY(0) 
    ( 32),   .    
  PCjr           
(0-2),     .

    .

          2,      [2.1.1].
            B
     8255 ( 61H).   
    ,  1.19 
      .       
,           2.   
   1  B  0,     -
       . 
      -
   BIOS,      [2.1.6].   
   440 .      
   .

;---  2   B  8255
PORT_B     EQU  61H           ;   B
           IN   AL,PORT_B     ;  
           OR   AL,3          ;   
           OUT  PORT_B,AL     ;    B

                             - 77 -

;---  /
COMMAND_REG  EQU  43H         ;  
CHANNEL_2    EQU  42H         ;  2
             MOV  AL,10110110B    ;    2
             OUT  COMMAND_REG,AL  ;   
;---   
           MOV  AX,2705       ; = 1190000/440
           OUT  CHANNEL_2,AL  ;  
           MOV  AL,AH         ;    AL
           OUT  CHANNEL_2,AL  ;  
;---  
           MOV  AH,1          ;   21H
           INT  21H           ; 
;--- 
           IN   AL,PORT_B     ;    B
           AND  AL,11111100B  ;   
           OUT  PORT_B,AL     ;  

                             - 78 -

   2.2.4  .

         .
    ,     -
   ,  ,      
   ,        .
             
    .       -
        -
.         -
   [2.2.7] ,   ,    
    (  ASCII 7  ).

    .

         BEEP.      , 
      :

100 INPUT "Enter your age",AGE             ' 
110 IF AGE > 100 THEN BEEP:PRINT"Are you really over 100?"

              
 SOUND.    :  SOUND  ,   , 
     (3000 -  ),   -
       .  SOUND 3000,18 
    .   -
          ,
     .

100 FOR N = 1 TO 200   '  
110 SOUND 500,1        '    1 
120 SOUND 5000,1       '    1 
130 NEXT               '

    .

          
 .        -
  ASCII 7     (.. ),
     DOS  BIOS.   ASCII 7 -
    ""       -
.     2  21H:

   MOV  AH,2     ;    
   MOV  DL,7     ;  ASCII 7
   INT  21H      ; 

    .

          ,   
        8255 [1.1.1].
  ,    ,  -
     .

                             - 79 -

;--- 
            MOV  DX,800          ;  
            IN   AL,61H          ;  B 8255
            AND  AL,0FEH         ;   8253
NEXTCYCLE:  OR   AL,2            ;  
            OUT  61H,AL          ;    B
            MOV  CX,150          ;  
CYCLEUP:    LOOP CYCLEUP         ;   
            AND  AL,0FDH         ;  
            OUT  61H,AL          ;    B
CYCLEDOWN:  LOOP CYCLEDOWN       ;   
            DEC  DX              ;  
            JNZ  NEXTCYCLE       ;   DX  0

                             - 80 -

   2.2.5   .

             ,
     ;    
    ,     .
     ,     
    ;    
  ,     .
          -
,  .        -
   .      
    ,   [2.2.2]   [2.2.3].
             
 ,    ..    
    ,     -
   ,       (
,     ).   
          
BIOS [2.1.6].

    .

     PLAY   .  -
    ,      
,      .   -
 A - G       .  -
  #  +,      (-).   PLAY
"CC#D"  PLAY "CD-D" ,     
     .      
       0  84,  0  -
  ,      1  84 
84    ,  .   -
  N: PLAY "N3N72N44".
     -    ,      
  C()  B().     0  6   
      3.    
     ,        O,  
   .       ,
    4.   PLAY "O3CO4CO5CO6C"  
     .      
        >   <,  
      , .  
PLAY "O3C>C>C>C"     ,   .
            
  ,    L.   -
          ,
     .   -    1  64,
  1   ,  64 - 1/64.   L4 -
 .       
 ,     T,    
 32  255,   ,   .  
   ,      L4
  120.           
        L.   PLAY

                             - 81 -

"L4CDE16FG"  E  ,     
.      ,   
.     1  64   P  .  P1 -
     ,  P64 -  1/64.    
     ,         -
  :        .
     .
       7/8   .  
    (),    
ML.    3/4   (), 
  MS.        MN.
   ,        
,       .      
,     PLAY,     
 ,      MB.    -
   MF.
   ,    PLAY     
 .      ,      
      ,    
        -
  PLAY.   ,   S$ =  "EEEEE",       PLAY
"CDXS$;FG"  E   5 . ,   -
    X,     
  (;).  (       
,   VARPTR$ -  .  
 ).
              
.        ,
    ,  , ,  , , 
    ,    .    
     -  -
 .

   100 PLAY "ML T40 O3 ECD<G P32 G>DEC"

       PCjr    
PLAY  . -,   V, -
  .   V5   (  )
   5.    0  15,  
   8.  0   .  -,  
  PLAY      
.         , -
  .       
    ,       
     SOUND ON.

   100 SOUND ON
   110 PLAY "...........","..........","............"

    .

           
8253.      8 ,    
       .   
 .     , 
      (   -

                             - 82 -

,     ).       
  8 ;            
   2  8253    .
          1  8,
     .     
 0FFH,         . 
      ,    
      2.     
     ,    
 ,     ,     -
  .  . 2-5    .

;---  
BEAT        DB   10,9,8,7,6,5,4,3,2    ; 
FREQUENCY   DW   2280,2031,1809,1709   ; 
            DW   1521,1353,1207,1139   ;
MELODY      DB   1,2,3,4,5,6,7,8,0FFH  ;  

;---
PORT_B      EQU  61H
COMMAND_REG EQU  43H
LATCH2      EQU  42H
            IN   AL,PORT_B      ;  
            OR   AL,00000011B   ;   
            OUT  PORT_B,AL      ; 
            MOV  SI,0           ; 
            MOV  AL,0B6H        ;   2
            OUT  COMMAND_REG,AL ;   
;--- ,        2
NEXT_NOTE:  LEA  BX,MELODY      ;   
            MOV  AL,[BX][SI]    ;  n-  
            CMP  AL,0FFH        ;   
            JE   NO_MORE        ; ,   
            CBW                 ;  
   ; 
            MOV  BX,OFFSET FREQUENCY  ;  
            DEC  AX             ;   0
            SHL  AX,1           ;  2, .. 
            MOV  DI,AX          ;  DI
            MOV  DX,[BX][DI]    ;   
   ;  
            MOV  AL,DL          ;   
            OUT  LATCH2,AL      ; 
            MOV  AL,DH          ;   
            OUT  LATCH2,AL      ; 
;---  
            MOV  AH,0           ;   
            INT  1AH            ;  
            MOV  BX,OFFSET BEAT ;  
            MOV  CL,[BX][SI]    ;   
            MOV  CH,0           ;
            MOV  BX,DX          ;   
            ADD  BX,CX          ;  

                             - 83 -

STILL_SOUND: INT 1AH            ;  
            CMP  DX,BX          ;  
            JNE  STILL_SOUND    ; -  
            INC  SI             ;   
            JMP  NEXT_NOTE      ;
;---
NO_MORE:    IN   AL,PORT_B      ;   B
            AND  AL,0FCH        ; 
            OUT  61H,AL         ; 

                             - 84 -

   2.2.6   ,    -
.

            ,    
     .  -
         -
  8253  [2.2.3],   ,    8255
[2.2.2],  . ,   
         -  
     .   -
       [2.1.7].   ,
   ,     ,
    18.2   ,   -
    .    -
         -
,     ,   
  ,  ,    
     .

    .

              
            PLAY,
      [2.2.5].      
   MB.     Music Background
( );        PLAY  
 ,       -
,  MF.         
       (     
  ).

100 PLAY "MB T100 O3 L4;CDEFG>ABC"  '  
110 LINE (10,10)-(80,80),1,BF       '  

    .

       , 
  ,      .   
,    ,  -
  [2.1.7].       -
        18.2    ,   
,        
BIOS. ,     , 
,   ,        
,  -        
.
      BIOS    -
  .        , -
           
       .      
         
,      ,   
      ,   
    2  8253      -
.          
      .

                             - 85 -

;---  
BEAT        DB   10,9,8,7,6,5,4,3,2   ; 
FREQUENCY   DW   2280,2031,1809,1709  ; 
            DW   1521,1355,1207,1139  ;
MELODY      DB   1,2,3,4,5,6,7,8,0FFH ;   
HOLDIP      DW   0                    ; 
HOLDCS      DW   0                    ; 
SOUND_NOW?  DB   1                    ; ?
FIRST_NOTE? DB   1                    ; ?
END_NOTE    DW   0                    ;  
WHICH_NOTE  DW   0                    ;   
;---  
   ; 
   PUSH  DS                      ; 
   MOV   AX,SEG MELODY2          ; 
   MOV   DS,AX                   ;  DS
   MOV   DX,OFFSET MELODY2       ; 
   MOV   AL,1CH                  ;  
   MOV   AH,25H                  ;  
   INT   21H                     ; 
   POP   DS                      ; 
;
;---  ,   
;
;---     
   MOV   DX,0FF53H        ; 
   MOV   AX,0F000H        ;   1CH
   MOV   DS,AX            ;
   MOV   AL,1CH           ; 
   MOV   AH,25H           ;  
   INT   21H              ; 
   RET                    ;

;---  
MELODY2    PROC FAR
           PUSH AX        ;  
           PUSH BX        ;
           PUSH CX        ;
           PUSH DX        ;
           PUSH DI        ;
           PUSH SI        ;
           PUSH DS        ;
           MOV  AX,SS:[114]   ;  DS  
           MOV  DS,AX         ; 
           CMP  SOUND_NOW?,1  ;  ?
           JE   PLAY_IT       ; ,    
           JMP  NOT_NOW       ;
PLAY_IT:   CMP  FIRST_NOTE?,0 ;  ?
           JE   TIME_CHECK    ; ,    

                             - 86 -

;---
PORT_B        EQU  61H           ;  
COMMAND_REG   EQU  43H           ;
LATCH2        EQU  42H           ;
              IN   AL,PORT_B     ;   B
              OR   AL,00000011B  ;   
              OUT  PORT_B,AL     ;  
              MOV  SI,0          ;  
              MOV  AL,0B6H       ;  2 
              OUT  COMMAND_REG,AL   ;   
              MOV  FIRST_NOTE?,0    ;   
;--- ,   ,    2
NEXT_NOTE:    LEA  BX,MELODY     ;   
              MOV  SI,WHICH_NOTE ;   
              MOV  AL,[BX][SI]   ;   
              CMP  AL,0FFH       ;  
              JE   NO_MORE       ; ,   
              CBW                ;   
   ; 
              MOV  BX,OFFSET FREQUENCY  ;  
              DEC  AX            ;   
              SHL  AX,1          ;  2, .. 
              MOV  DI,AX         ;  DI
              MOV  DX,[BX][DI]   ;   
   ;  
              MOV  AL,DL         ;   
              OUT  LATCH2,AL     ;   
              MOV  AL,DH         ;  
              OUT  LATCH2,AL     ; 
;--- ,   
TIME_IT:      MOV  AH,0          ;  
              INT  1AH           ;  
              MOV  BX,OFFSET BEAT  ;   
              MOV  CL,[BX][SI]   ;  
              MOV  CH,0          ;
              MOV  BX,DX         ;   
              ADD  BX,CX         ;   
              MOV  END_NOTE,BX   ;  
TIME_CHECK:   MOV  AH,0          ;  
              INT  1AH           ; 
              CMP  DX,END_NOTE   ;  
              JNE  NOT_NOW       ; ,  
              MOV  SI,WHICH_NOTE ;,   
              INC  SI            ;  
              MOV  WHICH_NOTE,SI ; 
              JMP  NEXT_NOTE     ;  
;--- 
NO_MORE:      IN   AL,PORT_B     ;   B
              AND  AL,0FCH       ; 
              OUT  61H,AL        ; 
              MOV  SOUND_NOW?,0  ; 
              MOV  FIRST_NOTE?,1 ;

                             - 87 -

NOT_NOW:      POP  DS            ; 
              POP  SI            ;
              POP  DI            ;
              POP  DX            ;
              POP  CX            ;
              POP  BX            ;
              POP  AX            ;
              IRET               ;  
MELODY2       ENDP

                             - 88 -

   2.2.7    .

          -
 .       ,   -
    .        
 ,      
        -
  .

    .

         SOUND [2.2.2]  ,
    .     
  .    [2.2.8],   
  PLAY    .

100 FOR N = 1 TO 500 STEP 15
110 SOUND 400 + N,1
120 NEXT

    .

          ,  
    8255.   
  1  B  0  1,     
,    [2.2.2].       
,      CX,    -
.   :

;---  
PB       EQU  61H        ;  B  8255
         IN   AL,PB      ;   
         OR   AL,1       ;  0
         OUT  PB,AL      ;   
;---    
         MOV  BX,9000    ;  
         MOV  DX,3000    ;  3000 
REPEAT:                  ;   
;---  
         OR   AL,00000010B   ;  1
         OUT  PB,AL          ;    B
         MOV  CX,BX          ;   1/2 
CYCLE1:  LOOP CYCLE1         ;   1000 
;---  
         AND  AL,11111101B   ;  1
         OUT  PB,AL          ;   
         MOV  CX,BX          ; 
CYCLE2:  LOOP CYCLE2         ; 
;---   
         DEC  BX             ; , 
         DEC  BX             ;
         DEC  DX             ;  
         JNZ  REPEAT         ; DX  0,   

                             - 89 -

       ,      
 ,   .      
   ,     ,  
,        DX  
  .

                             - 90 -

   2.2.8   .

            
 .  PCjr       
 (.   [2.2.1]).      -
      .

    .

       SOUND  PLAY  -
      .   
         ,  
,            
     ,       
.  ,  ""    
        ,  
 :

100 FOR N = 1 TO 100     ' 
110 PLAY "L64 T255"      '  
120 PLAY "O1A"           '  A
130 PLAY "O5A"           '  A
140 NEXT                 '

        :

100 FOR N = 1 TO 100     ' 
110 SOUND 440,1          '  A
120 SOUND 445,1          '  
130 NEXT                 '

          
 ,       
 .   .  2-6     -
.       :

100 FOR I = 1 TO 10   ' 
110 FOR J = 1 TO 6    '  
120 PLAY "MBL64T255O=J;BA#AG#GF#FED#DC#CC#DD#EFF#GG#AA#B"
130 NEXT              '    
140 NEXT              '  

   PCjr   ,   , 
    .    NOISE  
  ,    :

   NOISE , , 

  -     0  7,      
:

                             - 91 -

   0           
   1           
   2           
   3        ,     3
   4           
   5           
   6           
   7        ,     3
     0    15,   0  -
 .     -
  ,   18.2   .

    .

     ,      
  , ,     ,   -
   .   ,  
    ,  ,    
 ,   ,     -
.          -
 .     , 
50   1,   .       10
- 20 ,          . 
         -
 8255,          [2.2.2].  
:

NUMBER_CYCLES  EQU  300     ;  
FREQUENCY1     EQU  50      ;,   
FREQUENCY2     EQU  3200    ;,   
PORT_B         EQU  61H     ;  B  8255
            CLI                  ; 
            MOV  DX,NUMBER_CYCLES;DX   
            IN   AL,PORT_B       ;  
            AND  AL,11111110B    ;   
NEXT_CYCLE: OR   AL,00000010B    ; 
            OUT  PORT_B,AL       ; 
            MOV  CX,FREQUENCY1   ;   
FIRST_HALF: LOOP FIRST_HALF      ;
            AND  AL,11111101B    ; 
            OUT  PORT_B,AL       ; 
            MOV  CX,FREQUENCY2   ;   
SECND_HALF: LOOP SECND_HALF      ;
            DEC  DX              ;  
            JNZ  NEXT_CYCLE      ; 0,   
            STI                  ; 

         , 
   FREQUENCY2    40000.

                             - 92 -

   2.2.9    .

       ,    PCjr, -
      (.     
[2.2.1]).       -
  ,        
 .        -
    .         
,        , 
  .       
 .

    .

          , 
 [2.2.2]  [2.2.3].     2  -
.       ,      1  B
    .     
 .     
 .

;---     2 
      IN   AL,61H          ;    B
      OR   AL,3            ;   
      OUT  61H,AL          ;  
      MOV  AL,10110110B    ;    8253
      OUT  43H,AL          ;  
      MOV  AX,600H         ;   2
      OUT  42H,AL          ;  
      MOV  AL,AH           ;  
      OUT  42H,AL          ;  
;---    8255
NUMBER_CYCLES  EQU  9000           ; 
FREQUENCY      EQU  150            ;   
               CLI                 ; 
               MOV  DX,NUMBER_CYCLES  ;DX   
               IN   AL,61H         ;  
               AND  AL,11111111B   ;   
NEXT_CYCLE:    OR   AL,00000010B   ; 
               OUT  61H,AL         ;   
               MOV  CX,FREQUENCY   ;  1/2 
FIRST_HALF:    LOOP FIRST_HALF     ;
               AND  AL,11111101B   ; 
               OUT  61H,AL         ;   
               MOV  CX,FREQUENCY   ;  1/2 
SECOND_HALF:   LOOP SECOND_HALF    ;
               DEC  DX             ;  
               JNZ  NEXT_CYCLE     ; 0,   
               STI                 ; 
;---  2  
               IN   AL,61H         ;  
               AND  AL,11111100B   ; 2  
               OUT  61H,AL         ;  